const fs = require('fs')

// 1.文件异步写入
// fs.writeFile('./test.txt', '落霞与孤鹜齐飞，秋水共长天一色。', err => {
//     if (err) {
//         console.log('1111111', err)
//         return err
//     }
//     console.log('写入成功。');
// })

// 2.文件同步写入
// fs.writeFileSync('./test1.txt', '1111')

// 3.文件异步追加写入
// fs.appendFile('./test.txt', '\n渔舟唱晚，响穷彭蠡之滨。\r雁阵惊寒，声断衡阳之浦。', err => {
//     if (err) {
//         console.log('出错了', err);
//         return err
//     }
//     console.log('追加写入成功.');
// })

// 4.文件同步追加写入
// fs.appendFileSync('./test.txt', '\r\n遥襟甫畅，逸兴遄飞。')

// 5.文件异步追加写入-方法2
// fs.writeFile('./test.txt', '\r\n爽籁发而清风生，纤歌凝而白云遏。', { flag: 'a'}, err => {
//     if (err) {
//         console.log('出错了', err);
//         return
//     }
//     console.log('writeFile 追加写入成功');
// })

// 6.文件同步追加写入-方法2
// fs.writeFileSync('./test.txt', '\r\n睢园绿竹，气凌彭泽之樽。', { flag: 'a' })

// 7.创建流式写入对象（减少打开关闭文件的次数）
// 流式写入适用于大文件写入或频繁写入的场景，writeFile适合写入频率低的场景。
// const ws = fs.createWriteStream('./test.txt')
// ws.write('穷睇眄于中天，极娱游于暇日。\r\n')
// ws.write('天高地迥，觉宇宙之无穷。\r\n')
// ws.write('兴尽悲来，识盈虚之有数。\r\n')
// ws.close() // 关闭通道

// 8.异步读取
// fs.readFile('./test.txt', (err, data) => {
//     if (err) {
//         console.log('读取失败');
//         return
//     }
//     console.log('异步读取：\r\n', data.toString());
// })

// 9.同步读取
// const data = fs.readFileSync('./test.txt')
// console.log('同步读取：\r\n', data.toString());

// 10.创建读取流对象
// const rs = fs.createReadStream('./test.txt')
// const ws1 = fs.createWriteStream('./a/text.txt')
// rs.on('data', chunk => {
//     console.log('chunk-buffer：\r\n', chunk);
//     console.log('chunk-length：\r\n', chunk.length);
//     console.log('chunk-toString：\r\n', chunk.toString());
//     ws1.write(chunk)
// })
// rs.on('end', () => {
//     console.log('流对象读取完毕');
//     console.log(process.memoryUsage().rss>>10>>10);
// })

// rs.pipe(ws1) // 管道

// 11.重命名文件
// fs.rename('./text.txt', './text-rn.txt', err => {
//     if (err) {
//         console.log('操作失败');
//         return
//     }
//     console.log('重命名成功!');
// })
// fs.renameSync('./text.txt', './a/text.txt')

// 12.移动文件(移入的文件夹需要提前建好)
// fs.rename('./text.txt', './a/text.txt', err => {
//     if (err) {
//         console.log('操作失败');
//         return
//     }
//     console.log('移动成功!');
// })
// fs.renameSync('./a/text.txt', './text-rn.txt')

// 13.删除文件
// fs.unlink('./a/text.txt', err => {
// fs.rm('./a/text.txt', err => {
//     if (err) {
//         console.log('删除失败')
//         return
//     }
//     console.log('删除成功');
// })
// fs.unlinkSync('./a/text.txt')

// 14.创建文件夹
// fs.mkdir('./a/b', { recursive: true }, err => {
//     if (err) {
//         console.log('创建失败', err);
//         return
//     }
//     console.log('创建成功');
// })
// try {
//     // fs.mkdirSync('./a')
//     fs.mkdirSync('./d/e/f', { recursive: true }) // 递归创建
// } catch (error) {
//     console.log('创建失败', error.code)
// }

// 15.读取文件夹
// fs.readdir('.', (err, files) => {
//     if (err) {
//         console.log('读取失败')
//         return
//     }
//     console.log('读取成功', files);
// })
// console.log(fs.readdirSync('.'));

// 16.删除文件夹
// fs.rm('./d', { recursive: true }, err => {
//     if (err) {
//         console.log('删除失败');
//         return
//     }
//     console.log('删除成功');
// })
// fs.rmSync('./a', { recursive: true })
// fs.rmdirSync('./a', { recursive: true }) // 未来removed

// 17.查看资源状态
// fs.stat('./test.txt', (err, stats) => {
//     if (err) {
//         console.log('查看失败');
//         return
//     }
//     console.log('查看成功', stats);
//     console.log(stats.isFile());
//     console.log(stats.isDirectory());
// })
// console.log(fs.statSync('./test.txt'));
// console.log(fs.statSync('./2.js').isDirectory());